package com.tensquare.recruit.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import com.tensquare.recruit.mapper.EnterpriseMapper;
import com.tensquare.recruit.domain.Enterprise;
import com.tensquare.recruit.service.IEnterpriseService;

/**
 * 企业Service业务层处理
 * 
 * @author hbxfwf
 * @date 2021-08-25
 */
@Service
public class EnterpriseServiceImpl implements IEnterpriseService 
{
    @Autowired
    private EnterpriseMapper enterpriseMapper;

    /**
     * 查询企业
     * 
     * @param id 企业主键
     * @return 企业
     */
    @Override
    public Enterprise selectEnterpriseById(String id)
    {
        return enterpriseMapper.selectEnterpriseById(id);
    }

    /**
     * 查询企业列表
     * 
     * @param enterprise 企业
     * @return 企业
     */
    @Override
    public List<Enterprise> selectEnterpriseList(Enterprise enterprise)
    {
        return enterpriseMapper.selectEnterpriseList(enterprise);
    }

    /**
     * 新增企业
     * 
     * @param enterprise 企业
     * @return 结果
     */
    @Override
    public int insertEnterprise(Enterprise enterprise)
    {
        return enterpriseMapper.insertEnterprise(enterprise);
    }

    /**
     * 修改企业
     * 
     * @param enterprise 企业
     * @return 结果
     */
    @Override
    public int updateEnterprise(Enterprise enterprise)
    {
        return enterpriseMapper.updateEnterprise(enterprise);
    }

    /**
     * 批量删除企业
     * 
     * @param ids 需要删除的企业主键
     * @return 结果
     */
    @Override
    public int deleteEnterpriseByIds(String[] ids)
    {
        return enterpriseMapper.deleteEnterpriseByIds(ids);
    }

    /**
     * 删除企业信息
     * 
     * @param id 企业主键
     * @return 结果
     */
    @Override
    public int deleteEnterpriseById(String id)
    {
        return enterpriseMapper.deleteEnterpriseById(id);
    }


    /**
     * 功能: 将企业进行缓存
     * 参数:
     * 返回值: java.util.List<com.tensquare.recruit.domain.Enterprise>
     * 时间: 2021/8/27 15:26
     */
    @Override
    @Cacheable(value={"enterprises"},key = "#root.methodName")  //#root.methodName: 使用spEL语言取出当前的方法名为key
    public List<Enterprise> findAll(Enterprise enterprise) {
        System.out.println("正在访问数据库。。。");
        return enterpriseMapper.selectEnterpriseList(enterprise);
    }

    /**
     * 功能: 添加企业
     * 参数:
     * 返回值: int
     * 时间: 2021/8/27 15:47
     */
    @Override
    //一次性删除一个指定的缓存
    //@CacheEvict(value={"enterprises"},key = "'findAll'" )  //key中使用的是spel语言，所以使用字符串作为缓存的key时一定要加引号
    //删除多个缓存：方法一
    @CacheEvict(value={"enterprises"},allEntries = true)
    //删除多个缓存：方法二
    // @Caching(evict = {
    //         @CacheEvict(value={"enterprise"},key = "'findAll'"),
    //         @CacheEvict(value={"caregorys"},key = "'queryPage'"),
    // })
    public int insert(Enterprise enterprise) {
        System.out.println("正在删除缓存[insert] enterprises::findAll");
        return enterpriseMapper.insertEnterprise(enterprise);
    }

    /**
     * 功能: 修改企业
     * 参数:
     * 返回值: int
     * 时间: 2021/8/27 15:58
     */
    @Override
    @CacheEvict(value={"enterprises"},allEntries = true)
    public int update(Enterprise enterprise) {
        System.out.println("正在删除缓存[update]: enterprises分区下所有缓存.");
        return enterpriseMapper.updateEnterprise(enterprise);
    }

    /**
     * 功能: 根据id删除企业
     * 参数:
     * 返回值: int
     * 时间: 2021/8/27 16:10
     */
    @Override
    @Caching(evict = {
            @CacheEvict(value={"enterprises"},key = "'findAll'" )
    })
    public int deleteById(String[] ids) {
        System.out.println("正在删除缓存[deleteById]: enterprises分区下所有缓存.");
        return enterpriseMapper.deleteEnterpriseByIds(ids);
    }
}
